﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using UricaoWeb.LogicaDeNegocios.Cargos;
using UricaoWeb.Datos.Excepciones.Cargos;

using UricaoWeb.LogicaDeNegocios.Restaurantes;
using UricaoWeb.Datos.ConexionBD.Restaurantes;

using System.Data;

namespace UricaoWeb.Presentacion
{
    public partial class API_restaurante_Consultar : API_Seguridad_Principal
    {
        private int seleccionFiltroRestaurante;
        //private static readonly string _mensajeExcepcionNullObject = "Error al tratar de acceder a un objeto vacio";
        //private static readonly string _codigoErrorExcepcion = "1111";
        public static int FK_HOTEL = 1;


        /* Ojo. un problema es que siempre se cargan los datos de la BD, en vez de cargarlos una vez y manipularlos.
         * Es decir, cada vez que yo cambio el estado de los datos, pido en la base de datos */
        /* Ojo. Si veo que se repite mucho cargar tabla en otras paginas, hacer una funcion en vez de reescribir todo el codigo*/

        protected void Page_Load(object sender, EventArgs e)
        {
            var master = Master as MasterPage;
            if (master != null)
            {
                master.actualizar_label();
            }
            base.validar_usuario();
            //cargarTablaR();

            if (!IsPostBack)
            {

                cargarTablaR();

            }
            else
            {
                //Muestro lo que ya existe
                
                GridView_ConsultarRestaurante.Visible = true;
            }
        }


        //llenar datagridview segun seleccion del usuario
        //Yo: Cuando se hace click en el indice de paginas.
        protected void GVConsultar_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {           

                 GridView_ConsultarRestaurante.PageIndex = e.NewPageIndex;
            cargarTablaR();


               switch (seleccionFiltroRestaurante)
               {
                   case 0:
                       cargarTablaR();

                       break;

                   case 1:
                       cargarTablaEstadoR(true);

                       break;

                   case 2:
                       cargarTablaEstadoR(false);

                       break;
          
               }

        }

        //Con radioButton Seleccionado y haciendo click, entonces
        protected void Button1_Click(object sender, EventArgs e)
        {
          
            switch (seleccionFiltroRestaurante)
            {
                case 0:
                    cargarTablaR();

                    break;

                case 1:
                    cargarTablaEstadoR(true);

                    break;

                case 2:
                    cargarTablaEstadoR(false);

                    break;
            }

        }
        
        //asignacion de valor del radiobutton
        protected void RadioButtonTodosCargos_CheckedChanged1R(object sender, EventArgs e)
        {
            seleccionFiltroRestaurante = 0;
        }

        protected void RadioButtonActivosCargos_CheckedChanged1R(object sender, EventArgs e)
        {
            seleccionFiltroRestaurante = 1;
        }

        protected void RadioButtonInactivosCargos_CheckedChanged1R(object sender, EventArgs e)
        {
            seleccionFiltroRestaurante = 2;
        }

        //carga el datagridview
        protected void cargarTablaR()
        {
            try
            {
                String _status = null;

                DataTable tablaRestaurante = new DataTable();

                //Yo
                DatosRestaurante fuenteDatosRestaurante = new DatosRestaurante();
                List<Restaurante> listaRestaurantes = fuenteDatosRestaurante.ListaRestaurantes(FK_HOTEL);
                //int pruebaFuncion = fuenteDatosRestaurante.DarIdRestaurante("La maison");



                //Columnas
                tablaRestaurante.Columns.Add("Nombre", typeof(string));
                tablaRestaurante.Columns.Add("Tipo", typeof(string));
                tablaRestaurante.Columns.Add("Telefono", typeof(string));
                tablaRestaurante.Columns.Add("Capacidad personas", typeof(string));
                tablaRestaurante.Columns.Add("Fecha Apertura", typeof(string));
                tablaRestaurante.Columns.Add("Fecha Clausura", typeof(string));
                tablaRestaurante.Columns.Add("Estado", typeof(string));





                //Para cada restaurante en listaRestaurante



                foreach (Restaurante restauranteIT in listaRestaurantes)
                {

                    //Ojo, ahora no se usa default(fechaClausura), sino con el boolean 

                   
                   // Object prueba = default(restauranteIT.ClausuraRestaurante);
                    if (restauranteIT.ActivoRestaurante == true)
                    {
                        _status = "Activo";
                    }
                    else
                    {
                        _status = "Inactivo";
                    }

            

                    tablaRestaurante.Rows.Add(
               
                                      restauranteIT.NombreRestaurante, 
                                      restauranteIT.TipoRestaurante, 
                                      restauranteIT.TelefonoRestaurante,
                                      restauranteIT.CapacidadRestaurante, 
                                      restauranteIT.AperturaRestaurante.ToString(),
                                      restauranteIT.ClausuraRestaurante.ToString(),
                                       _status
                                      );

                  

                }


                /*Cuidado con el nombre de GridView*/

               GridView_ConsultarRestaurante.DataSource = tablaRestaurante;
               GridView_ConsultarRestaurante.DataBind();




            }
            catch (NullReferenceException e)
            {
               // throw new CargoBDExcepcion(_codigoErrorExcepcion,_mensajeExcepcionNullObject, e);
            }

        }



      


        
        
        //carga del datagridview segun estatus
        public void cargarTablaEstadoR(Boolean tipo)
        {
            try
            {
                String _status = null;

              
                
                DataTable tablaRestauranteEstado = new DataTable();
                
                //Cargo[] _listaCargos = Cargo.ConsultarCargosPorEstado(tipo);

                            DatosRestaurante fuenteDatosRestaurante = new DatosRestaurante();
                List<Restaurante> listaRestaurantes = fuenteDatosRestaurante.ListaRestaurantes(FK_HOTEL);

                tablaRestauranteEstado.Columns.Add("Nombre", typeof(string));
                tablaRestauranteEstado.Columns.Add("Tipo", typeof(string));
                tablaRestauranteEstado.Columns.Add("Telefono", typeof(string));
                tablaRestauranteEstado.Columns.Add("Capacidad personas", typeof(string));
                tablaRestauranteEstado.Columns.Add("Fecha Apertura", typeof(string));
                tablaRestauranteEstado.Columns.Add("Fecha Clausura", typeof(string));
                tablaRestauranteEstado.Columns.Add("Estado", typeof(string));





                foreach (Restaurante restauranteIT in listaRestaurantes)
                {

                    //Ojo, MUY IMPORTANTE. AHORA se compara el Atributo de cada restaurante con la ELECCIÓN

                    //Comparo el bool que paso con el at. del obj                 
                    if (restauranteIT.ActivoRestaurante == tipo)
                    {
                        //Si es igual, entonces lo escribo. Apartir de este punto, tipo es igual a ActivoRestaurante 
                        if (tipo.Equals(true))
                        {
                            _status = "Activo";
                        }
                        else
                        {
                            _status = "Inactivo";
                        }

                        tablaRestauranteEstado.Rows.Add(

                                              restauranteIT.NombreRestaurante,
                                              restauranteIT.TipoRestaurante,
                                              restauranteIT.TelefonoRestaurante,
                                              restauranteIT.CapacidadRestaurante,
                                              restauranteIT.AperturaRestaurante.ToString(),
                                              restauranteIT.ClausuraRestaurante.ToString(),
                                              _status
                                            );
                    }



                    GridView_ConsultarRestaurante.DataSource = tablaRestauranteEstado;
                    GridView_ConsultarRestaurante.DataBind();


                }
            }
            catch (NullReferenceException e)
            {
               // throw new CargoBDExcepcion(_codigoErrorExcepcion, _mensajeExcepcionNullObject, e);
            }

        }
    }
}